7.03. Внутренности Git
Внутренности .git и алиасы
Когда вы инициализируете репозиторий с помощью git init, создаётся скрытая папка .git. Это всё, что Git использует для отслеживания изменений.
| Файл/Папка | Описание |
|---|---|
| HEAD | Указывает на текущую ветку или коммит (если detached). Обычно содержит ссылку на refs/heads/<branch>. Например, refs/heads/main содержит SHA-1 последнего коммита на ветке main. |
| config | Конфигурационный файл локального репозитория (имя пользователя, remote-репозитории и т.д.). Пример содержимого: [user] name = John Doe email = john@example.com [remote "origin"] url = https://github.com/john/repo.git fetch = +refs/heads/*:refs/remotes/origin/* |
| description | Описание репозитория (используется в GUI-инструментах) |
| hooks/ | Каталог для скриптов, выполняемых при определённых событиях Git (например, pre-commit, post-merge) |
| index | Индекс (staging area) — список файлов, подготовленных к включению в следующий коммит |
| info/ | Содержит служебную информацию, например, исключения для отображения в git log |
| logs/ | Журнал изменений ссылок (refs) и HEAD |
| objects/ | Хранение всех данных репозитория: коммитов, деревьев (trees), блобов (файлов) в сжатом виде по хешам SHA-1. Файлы размещаются в подкаталогах, имена которых соответствуют первым двум символам хеша, например: objects/ab/cdef1234567890... |
| refs/ | Каталог ссылок на коммиты: ветки (refs/heads/), теги (refs/tags/), удалённые ветки (refs/remotes/) |
Git позволяет создавать алиасы для команд — чтобы упростить и ускорить работу.
git config --global alias.<alias-name> "<command>"
Примеры:
# git st → git status
git config --global alias.st "status"
# git co → git checkout
git config --global alias.co "checkout"
# git br → git branch
git config --global alias.br "branch"
# git ci → git commit
git config --global alias.ci "commit"
# git lg → красивый вывод лога
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# git amend → исправить последний коммит
git config --global alias.amend "commit --amend -C HEAD"
# git undo → отменить последний коммит
git config --global alias.undo "reset HEAD~1"
# git unstage → убрать файл из индекса
git config --global alias.unstage "reset HEAD --"
Алиасы хранятся в глобальном конфиге Git ~/.gitconfig или git config --global --edit.
Пример содержимого:
[alias]
st = status
co = checkout
br = branch
ci = commit
undo = reset HEAD~1
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
Алиасы можно использовать не только для простых команд, но и для сложных сочетаний. Можно добавлять даже собственные shell-команды через !.